This is the counter part of the C/S
10565:
53f552ad404234c457fdd62560c9e8b0ea976674
Xen softirq is only checked only before returning to domain context.
So that it's non-sense to check in_interrupt() and add/sub SOFTIRQ_OFFSET.
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
#ifdef XEN
;;
(pUStk) ssm psr.i
-(pUStk) br.call.sptk.many b0=process_soft_irq
+(pUStk) br.call.sptk.many b0=do_softirq
(pUStk) rsm psr.i
;;
alloc loc0=ar.pfs,0,1,1,0
if (!is_idle_domain(d) ) { // always comes from guest
extern void vmx_dorfirfi(void);
struct pt_regs *user_regs = vcpu_regs(current);
- if (local_softirq_pending())
- do_softirq();
+ do_softirq();
local_irq_disable();
if (user_regs != regs)
static void default_idle(void)
{
- int cpu = smp_processor_id();
local_irq_disable();
- if ( !softirq_pending(cpu))
+ if ( !softirq_pending(smp_processor_id()) )
safe_halt();
local_irq_enable();
}
static void continue_cpu_idle_loop(void)
{
- int cpu = smp_processor_id();
for ( ; ; )
{
#ifdef IA64
#else
irq_stat[cpu].idle_timestamp = jiffies;
#endif
- while ( !softirq_pending(cpu) )
+ while ( !softirq_pending(smp_processor_id()) )
default_idle();
- add_preempt_count(SOFTIRQ_OFFSET);
raise_softirq(SCHEDULE_SOFTIRQ);
do_softirq();
- sub_preempt_count(SOFTIRQ_OFFSET);
}
}
sub_preempt_count(IRQ_EXIT_OFFSET);
}
-/*
- * ONLY gets called from ia64_leave_kernel
- * ONLY call with interrupts enabled
- */
-void process_soft_irq(void)
-{
- if (!in_interrupt() && local_softirq_pending()) {
- add_preempt_count(SOFTIRQ_OFFSET);
- do_softirq();
- sub_preempt_count(SOFTIRQ_OFFSET);
- }
-}
-
// this is a temporary hack until real console input is implemented
void guest_forward_keyboard_input(int irq, void *nada, struct pt_regs *regs)
{